package com.zh.note.huawei.twohundred.模拟工作队列;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

/**
 * https://dream.blog.csdn.net/article/details/132951215
 * <p>
 * 1 6 2 4 4 3 6 3
 * 1 2
 */
public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        // String input = sc.nextLine();
        // int workQueue = sc.nextInt();
        // int executor = sc.nextInt();
        String input = "1 6 2 4 3 3 4 3 6 3";
        int workQueueSize = 1;
        int executorNum = 2;
        String[] kk = input.split(" ");
        int[] x = new int[100];
        for (int i = 0; i < kk.length; i++) {
            x[i] = Integer.parseInt(kk[i]);
        }


        Queue<Integer> workQueue = new LinkedList<>(); // 创建一个工作队列，用于存储数据的索引
        // 使用小根堆
        PriorityQueue<Integer> executorQueue = new PriorityQueue<>(); // 创建一个优先队列作为执行者，用于存储数据的计算结果
        int ans = 0, max = 0, index = 0; // 初始化一些变量，用于记录最终的结果

        for (int i = 1; i <= 1000; i++) { // 从1到1000循环遍历
            while (!executorQueue.isEmpty() && executorQueue.peek() <= i) { // 处理priorityQueue中小于等于i的数据
                executorQueue.poll(); // 移除队列中最小的元素
            }

            while (executorQueue.size() < executorNum && !workQueue.isEmpty()) { // 处理priorityQueue中元素不足workQueue的情况
                int m = workQueue.poll(); // 从队列queue中取出索引
                if (x[m] <= i) { // 队列中的时间点小于当前的时间点i
                    executorQueue.add(i + x[m + 1]); // 将计算结果加入priorityQueue中
                    max = Math.max(max, i + x[m + 1]); // 更新max的值
                } else {
                    break;
                }
            }

            if (x[index] == i) { // 处理x[l]等于i的情况
                if (executorQueue.size() < executorNum) { // 如果priorityQueue中元素不足executor
                    int temp = i + x[index + 1];
                    executorQueue.add(temp); // 将计算结果加入priorityQueue中
                    max = Math.max(max, temp); // 更新max的值
                } else {
                    workQueue.add(index); // 否则将索引l加入队列queue中
                }

                while (workQueue.size() > workQueueSize) { // 处理队列queue中元素超过workQueue的情况
                    workQueue.poll(); // 移除队列中的元素
                    ans++; // 增加ans的值
                }
                index += 2; // 增加index 的值
            }
        }
        System.out.println(max + " " + ans);
    }


}
